package com.edwardsoft.dao.impl;

import com.edwardsoft.dao.UserDao;
import com.lin.pojo.User;
import com.lin.utils.EntityManagerUtil;

import javax.persistence.EntityManager;

public class UserDaoImpl implements UserDao {

    // 添加用户
    public void save(User user) {
        // 生成Session实例
        EntityManager entityManager = EntityManagerUtil.getEntityManager();
        // 创建Transaction实例
        entityManager.getTransaction().begin();

        try {
            entityManager.persist(user);
            entityManager.getTransaction().commit(); // 提交事务
        } catch (Exception e) {
            e.printStackTrace();
            entityManager.getTransaction().rollback();// 回滚事务
        } finally {
            EntityManagerUtil.closeEntityManager();
        }

    }

    // 按id查找用户
    public User findById(int id) {

        User user = null;

        // 生成Session实例
        EntityManager entityManager = EntityManagerUtil.getEntityManager();
        // 创建Transaction实例
        entityManager.getTransaction().begin();

        try {
            // 使用Session的get方法獲取指定id的用戶到內存中
            user = entityManager.find(User.class, id);
            entityManager.getTransaction().commit(); // 提交事务
        } catch (Exception e) {
            e.printStackTrace();
            entityManager.getTransaction().rollback();// 回滚事务
        } finally {
            EntityManagerUtil.closeEntityManager();
        }

        return user;
    }

    public void delete(User user) {
        // 生成Session实例
        EntityManager entityManager = EntityManagerUtil.getEntityManager();
        // 创建Transaction实例
        entityManager.getTransaction().begin();

        try {
            // 使用Session的delete方法将持久化对象删除
            entityManager.remove(user);
            entityManager.getTransaction().commit(); // 提交事务
        } catch (Exception e) {
            e.printStackTrace();
            entityManager.getTransaction().rollback();// 回滚事务
        } finally {
            EntityManagerUtil.closeEntityManager();
        }

    }

    public void update(User user) {
        // 生成Session实例
        EntityManager entityManager = EntityManagerUtil.getEntityManager();
        // 创建Transaction实例
        entityManager.getTransaction().begin();

        try {
            // 使用Session的update方法更新持久化对象
            entityManager.merge(user);
            entityManager.getTransaction().commit(); // 提交事务
        } catch (Exception e) {
            e.printStackTrace();
            entityManager.getTransaction().rollback();// 回滚事务
        } finally {
            EntityManagerUtil.closeEntityManager();
        }

    }

}